<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //静态成员: 属于类的 不属于 实例化对象的成员 ,不需要实例化
        //ES5
        //1.静态属性 2.静态方法
        // let num = 0;

        // function Person(name) {
        //     this.name = name;
        //     this.num = 0;
        //     num++;
        //     console.log(Person.num); // 0   1
        //     Person.num++;
        // }
        // Person.num = 0; // 静态属性
        // Person.fn = function () { //静态方法
        //     console.log("fn");
        // }

        // console.log(Person.num); //0
        // Person.fn(); //fn

        //统计Person类实例化的次数
        // let zhangsan = new Person("张三");
        // let lisi = new Person("李四");
        // console.log(Person.num); // 2

        //ES6 静态成员
        // class Person {
        //     static num = 0; // 静态属性
        //     constructor(name) {
        //         this.name = name;
        //     }
        //     static fn() {
        //         console.log("fn"); //静态方法
        //     }
        // }
        // console.log(Person.num); // 0
        // Person.fn(); // fn

        //单例模式 : 一个类只保证有一个实例: window  document  store
        class Person {
            //通过instance保存实例化的状态
            static instance = null;
            constructor(name) {
                this.name = name;
                if (!Person.instance) {
                    //没有实例化,就通过Person.instance 静态属性保存实例
                    Person.instance = this;
                } else {
                    //已经实例化过,直接获取静态属性返还
                    return Person.instance;
                }
            }
        }
        let zhangsan = new Person("张三");
        let lisi = new Person("李四");
        console.log(zhangsan, lisi); // Person {name: '张三'} Person {name: '张三'}
    </script>
</body>

</html>